<?php
declare (strict_types = 1);

// +----------------------------------------------------------------------
// |AdminUser 逻辑层模型 -- 实现具体业务、逻辑判断、简单的增删改查
// +----------------------------------------------------------------------

namespace app\index\logic;


use app\index\model\AdminUser as AdminUserModel;

class AdminUser
{

    protected $model;
    public function __construct()
    {
        $this->model = new AdminUserModel();
    }

    /**
     * 新增
     * $data为数组
     * saveAll方法新增数据返回的是包含新增模型（带自增ID）的数据集对象。
     */
    public function add($data)
    {
        //返回自增主键
        $res = model('AdminUser')
            ->allowField(true)
            ->save($data);
        return $res->id;
    }

    /**
     * 批量新增
     * $data必须为二维数组
     * saveAll方法新增数据返回的是包含新增模型（带自增ID）的数据集对象。
     */
    public function batch_add($data)
    {
        $res = model('AdminUser')
            ->saveAll($data);
        return $res;
    }
    /**
     * 查找并更新
     *
     * saveAll方法新增数据返回的是包含新增模型（带自增ID）的数据集对象。
     */
    public function getAndEdit($where = null, $data = null)
    {
        if(empty($data) || empty($where)){
            return '$data或$where变量为空';
        }
        //默认获取主键为1的数据
        $res = model('WfUser')
            ->get($where)
            ->save($data);
        return $res;
    }




    /**
     * 绑定属性到父模型
     */
    public function profile()
    {
        return $this->hasOne('', '')->bind(['']);
    }

    /**
     * 一对多关联模型-参数:
     * 关联模型（必须）：关联模型类名
     * 外键（选填）：关联模型外键，默认的外键名规则是当前模型名+_id
     * 主键（选填）：当前模型主键，一般会自动获取也可以指定传入
     */
    public function hasMany1()
    {
        return $this->hasMany('');
    }

    /**
     * 一对一、一对多的相对关联模型-参数:
     * 关联模型（必须）：关联模型类名
     * 外键（选填）：当前模型外键，默认的外键名规则是关联模型名+_id
     * 主键（选填）：关联模型主键，一般会自动获取也可以指定传入
     */
    public function belongsTo1()
    {
        return $this->belongsTo('');
    }

    /**
     *  远程一对多关联模型-参数:
     *  关联模型（必须）：关联模型类名
     *  中间模型（必须）：中间模型类名
     *  外键：默认的外键名规则是当前模型名+_id
     *  中间表关联键：默认的中间表关联键名的规则是中间模型名+_id
     *  当前模型主键：一般会自动获取也可以指定传入
     *  中间模型主键：一般会自动获取也可以指定传入
     */
    public function hasManyThrough1()
    {
        return $this->hasManyThrough('','');
    }
    /**
     *  远程一对一关联模型-参数:
     *  关联模型（必须）：关联模型类名
     *  中间模型（必须）：中间模型类名
     *  外键：默认的外键名规则是当前模型名+_id
     *  中间表关联键：默认的中间表关联键名的规则是中间模型名+_id
     *  当前模型主键：一般会自动获取也可以指定传入
     *  中间模型主键：一般会自动获取也可以指定传入
     */
    public function hasOneThrough1()
    {
        return $this->hasOneThrough('','');
    }


    /**
     *  多对多关联模型-参数：
     *  关联模型（必须）：关联模型类名
     *   中间表：默认规则是当前模型名+_+关联模型名 （可以指定模型名）
     *  外键：中间表的当前模型外键，默认的外键名规则是关联模型名+_id
     * 关联键：中间表的当前模型关联键名，默认规则是当前模型名+_id
     */
    public function belongsToMany1()
    {
        return $this->belongsToMany('');
    }

    /**
     * 多对多相对关联
     */
    public function belongsToMany2()
    {
        return $this->belongsToMany(User::class, Access::class);
    }

    /**
     * 多态关联
     */
    public function morphMany1()
    {
        return $this->morphMany('', '');
    }
    /**
     * 多态 相对关联。
     */
    public function morphTo1()
    {
        return $this->morphTo();
    }

}

